#ifndef DEVICE_H
#define DEVICE_H

#include <QAbstractListModel>
#include <QVariantMap>
#include <QList>
#include <QString>
#include <QHash>
#include <QByteArray>
#include <QDateTime>
#include <QDateTime>
#include <QUuid>
#include "codelist.h"
#include <QDebug>
namespace Moolink {

    class Device{
    public:

        Device(QString name_, QString portname_, QString protocollib_="A",QString protocol_="A", int addr_=1, QString color_="gray"){
            name = name_;
            portName=portname_;
            protocolLib=protocollib_;
            protocol=protocol_;
            comAddr = addr_;
            colorCode = color_;
        }

        Device(QVariant devVar){

            id=devVar.value<QVariantMap>()["deviceId"].toString();
            UpdateDevice(devVar);


//            qDebug()<<protocolId;
//            qDebug()<<protocolIdByteArray.toHex();

        }

        void UpdateDevice(QVariant devVar){

            name=devVar.value<QVariantMap>()["deviceName"].toString();
            portName=devVar.value<QVariantMap>()["devicePort"].toString();
            protocolId=devVar.value<QVariantMap>()["protocolId"].toString();
            protocolLib=devVar.value<QVariantMap>()["protocolLib"].toString();
            protocol=devVar.value<QVariantMap>()["protocolName"].toString();
            dofunlistStr=devVar.value<QVariantMap>()["protocolFun"].toString();
            comAddr=devVar.value<QVariantMap>()["deviceAddr"].toInt();
            portBaudRate=devVar.value<QVariantMap>()["portBaudRate"].toInt();
            portDataBits=devVar.value<QVariantMap>()["portDataBits"].toInt();
            portParity=devVar.value<QVariantMap>()["portParity"].toInt();
            portStopBits=devVar.value<QVariantMap>()["portStopBits"].toInt();
            dataFormat=devVar.value<QVariantMap>()["dataFormat"].toString();

            QStringList dataPart=dofunlistStr.split(",");

            for(int i=0;i<dataPart.size();i++)
            {
                dofunlist[i]=dataPart.at(i).toInt();
            }

        }


        QString(*dataProcessFun)(Device *device,QByteArray responseData);
        QByteArray (*cmdProcessFun)(Device *device,int funCode);
        QString id;
        QString name;
        QString portName;
//        QUuid protocolIdUuid;
//        QByteArray protocolIdByteArray;
        QString protocolId;
        QString protocolLib;
        QString protocol;
        int comAddr;
        int portBaudRate;
        int portDataBits;
        int portParity;
        int portStopBits;

//        QString code;
//        QString codeOld;
//        QString codeName;
//        QString unit;
//        QString unitTotal;
        QString dataFormat;
        QString colorCode="gray";
        QString SystemTime;
        QString dataString;
        QChar dataFlag='B';
        bool protocolLibDataIsOk;
        bool protocolLibCmdIsOk;
        QList<Code*> deviceCodes;
        QByteArray dofunlist;
        QString dofunlistStr;
        int dofunCurrIndex=0;
        QVariantMap cpData;
    };

}



#endif // DEVICE_H
